\section{Conclusiones}

La implementación realizada soporta la interpretación de programas en lenguaje MyLanga. El analizador léxico y sintáctico lo provee el generador SableCC. SableCC puede producir como resultado un árbol de sintaxis concreta o si el usuario lo indica puede producir directamente el árbol de sintaxis abstracta.

La creación de una sintaxis abstracta para el lenguaje ha sido de gran utilidad. Debido a que luego que el parser, al verificar si el programa es sintácticamente correcto, entrega a las siguientes etapas del proceso un árbol de sintaxis abstracta. Las siguientes etapas del proceso basan su funcionamiento en la sintaxis abstracta y no en la sintaxis concreta. Esta dependencia en la sintaxis abstracta nos ha permitido ir evolucionando la etapa de análisis sintactico independientemente de las etapas de análisis semántico y de interpretación.

La sintaxis abstracta construída por SableCC implementa un patrón de ``Visitor'', lo cual ha redundado en una simplificación de la implementación de las etapas que basan su funcionamiento en la sintaxis abstracta.

El analizador semántico del intérprete es modular, permite el agregado y/o remoción de reglas semánticas de acuerdo a las necesidades del lenguaje. Cada regla semántica es un objeto que opera sobre el árbol de sintaxis abstracta del programa. Cada regla semántica se ejecuta por separado, y cada regla semántica recorre el árbol de sintaxis abstracta. Esto hace que la escritura y comprensión de las reglas semánticas sea más sencilla. En una implementación de nivel industrial, es probable que las reglas deban ser comprobadas todas al mismo tiempo, para minimizar la cantidad de recorridos sobre el árbol de sintaxis abstracta. Lo razonable es que el analizador semántico realice dos pasadas sobre el árbol de sintaxis abstracta, para poder soportar, por ejemplo, referencias hacia adelante.

Si bien todo el programa es un intérprete de programas escritos en lenguaje MyLanga, al módulo que interpreta un programa también se lo denomina intérprete. Este módulo también opera sobre el árbol de sintaxis abstracta del programa. El intérprete utiliza una pila para almacenar resultados intermedios. La utilización de una pila simplifica la construcción del intérprete, el cual al ejecutar por ejemplo una expresión aritmética deja el resultado de la misma en el tope de la pila, listo para que la siguiente instrucción lo utilice. Además, la utilización de una pila, le permite al intérprete ejecutar incluso funciones recursivas.